<?php

namespace app\modules\admin\models;

use Yii;

/**
 * This is the model class for table "cms_category".
 *
 * @property int $id 主键id
 * @property int $pid 父级栏目
 * @property int $model_id 模型id
 * @property string $category_name 栏目名称
 * @property string $category_alias 栏目别名
 * @property string $category_type list:最终列表栏目,channel:频道封面
 * @property string $keywords 关键字
 * @property string $description 描述
 * @property string $list_template 列表页模版
 * @property string $detail_template 详情页模版
 * @property string $channel_template 频道页模版
 * @property string $content 栏目内容(类似关于我们这样的页面可以用到)
 * @property int $deleted 是否删除
 * @property string $created 创建时间
 * @property string $modified 修改时间
 */
class CmsCategory extends BaseModel
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'cms_category';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['pid', 'model_id', 'deleted'], 'integer'],
            [['model_id', 'category_name', 'category_alias'], 'required'],
            [['content'], 'string'],
            [['created', 'modified'], 'safe'],
            [['category_name', 'category_alias', 'keywords'], 'string', 'max' => 100],
            [['category_type'], 'string', 'max' => 30],
            [['description'], 'string', 'max' => 200],
            [['list_template', 'detail_template', 'channel_template'], 'string', 'max' => 50],
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => Yii::t('app', '主键id'),
            'pid' => Yii::t('app', '父级栏目'),
            'model_id' => Yii::t('app', '模型id'),
            'category_name' => Yii::t('app', '栏目名称'),
            'category_alias' => Yii::t('app', '栏目别名'),
            'category_type' => Yii::t('app', 'list:最终列表栏目,channel:频道封面'),
            'keywords' => Yii::t('app', '关键字'),
            'description' => Yii::t('app', '描述'),
            'list_template' => Yii::t('app', '列表页模版'),
            'detail_template' => Yii::t('app', '详情页模版'),
            'channel_template' => Yii::t('app', '频道页模版'),
            'content' => Yii::t('app', '栏目内容(类似关于我们这样的页面可以用到)'),
            'deleted' => Yii::t('app', '是否删除'),
            'created' => Yii::t('app', '创建时间'),
            'modified' => Yii::t('app', '修改时间'),
        ];
    }


    /**
     * 获取栏目列表
     * @return array
     */
    public function getColumnList(array $condition = array(), $field = '*')
    {
        $orm = $this->orm();
        if ($condition) {
            foreach ($condition as $key => $value) {
                $orm = call_user_func_array(array($orm, $key), $value);
            }
        }
        $result = $orm->select($field)
            ->asArray()
            ->all();
        return $result;
    }


    /**
     * 删除栏目
     * @param type $id
     * @return type
     */
    public function deleteColumn($id)
    {
        $cateList = $this->getAllRecord('');
        $record = $this->getRecordInfoById($id);
        if (!$record) {
            $this->setMessage('栏目不存在');
            return FALSE;
        }
        $cmsPostModel = new CmsPost();
        #查找栏目下的文章
        $orm = $cmsPostModel->orm()->andWhere(array('category_id' => $record['id']));
        $articleCount = $cmsPostModel->getRecordList($orm, '', '', true);
        if ($articleCount > 0) {
            $this->setMessage('该栏目下还有文章');
            return FALSE;
        }
        #查找子栏目
        $sonRecord = treeStructForLayer($cateList, $id);
        if (!empty($sonRecord)) {
            $this->setMessage('请先删除子栏目');
            return FALSE;
        }
        #删除
        $result = $this->deleteRecordById($id);
        if (!$result) {
            $this->setMessage('删除失败');
            return FALSE;
        }
        $this->setMessage('删除成功');
        return TRUE;
    }

    /**
     * 获取栏目信息
     * @param type $id 文章id
     * @param type $field 字段名
     * @return type
     */
    public function getCateInfoById($id, $field = "*")
    {
        $result = $this->orm()
            ->select($field)
            ->asArray($id)->one();
        if (!$result) {
            return false;
        }
        return $result;
    }

    /**
     * 根据条件获取栏目信息
     * @access public
     * @author furong
     * @param $condition
     * @param $field
     * @return bool
     * @since 2017年4月26日 10:11:55
     * @abstract
     */
    public function getCateInfo($condition, $field = '*')
    {
        $orm = $this->orm();
        if ($condition) {
            foreach ($condition as $key => $value) {
                $orm = call_user_func_array(array($orm, $key), $value);
            }
        }
        $result = $orm->select($field)
            ->asArray()->one();
        if (!$result) {
            return false;
        }
        return $result;
    }


//    //组合一维数组
//    Static Public function unlimitedForLevel($cate, $html = '--', $pid = 0, $level = 0)
//    {
//        $arr = array();
//        foreach ($cate as $k => $v) {
//            if ($v['pid'] == $pid) {
//                $v['level'] = $level + 1;
//                $v['html'] = str_repeat($html, $level);
//                $arr[] = $v;
//                $arr = array_merge($arr, self::unlimitedForLevel($cate, $html, $v['id'], $level + 1));
//            }
//        }
//        return $arr;
//    }
//
//    //组合多维数组
//    Static Public function unlimitedForLayer($cate, $name = 'child', $pid = 0)
//    {
//        $arr = array();
//        foreach ($cate as $v) {
//            if ($v['pid'] == $pid) {
//                $v[$name] = self::unlimitedForLayer($cate, $name, $v['id']);
//                $arr[] = $v;
//            }
//        }
//        return $arr;
//    }
//
//    //传递一个子分类ID返回所有的父级分类
//    Static Public function getParents($cate, $id)
//    {
//        $arr = array();
//        foreach ($cate as $v) {
//            if ($v['id'] == $id) {
//                $arr[] = $v;
//                $arr = array_merge(self::getParents($cate, $v['pid']), $arr);
//            }
//        }
//        return $arr;
//    }
//
//    //传递一个父级分类ID返回所有子分类ID
//    Static Public function getChildsId($cate, $pid)
//    {
//        $arr = array();
//        foreach ($cate as $v) {
//            if ($v['pid'] == $pid) {
//                $arr[] = $v['id'];
//                $arr = array_merge($arr, self::getChildsId($cate, $v['id']));
//            }
//        }
//        return $arr;
//    }
//
//    //传递一个父级分类ID返回所有子分类
//    Static Public function getChilds($cate, $pid)
//    {
//        $arr = array();
//        foreach ($cate as $v) {
//            if ($v['pid'] == $pid) {
//                $arr[] = $v;
//                $arr = array_merge($arr, self::getChilds($cate, $v['id']));
//            }
//        }
//        return $arr;
//    }

}
